package ln.javatest.day12.demo02;
/*
java.util.Map<k,v>集合
Map集合的特点：
    1.Map集合是一个双列集合，Collection集合是单列集合，Map集合一个元素包含两个值（一个key，一个value）
    2.Map集合中的元素，key和value的数据类型可以相同，也可以不同
    3.Map集合中的元素，key是不允许重复的，value是可以重复的
    4.Map集合中的元素，key和value是一一对应

java.util.HashMap<K,V>集合 implements Map<K,v>接口
HashSet集合new的就是HashMap，但是只用了其中的K，这里的K不能重复，所以HashSet中的不允许存储重复的数据；
HashMap的特点：
    1.HashMap底层也是一个哈希表(数组+链表/红黑树)，和HashSet一样:查询的速度非常快
    2.这里HashMap还是一个无序的集合；
    3.是个多线程，不同步；
java.util.LinkedHashMap<k,v>集合 extends HashMap<k,v>集合
LinkedHashMap的特点：
    1.底层是哈希表+链表，双重链表，另一个存储顺序
    2.LinkedHashMap集合是一个有序的集合
*/

import java.util.HashMap;
import java.util.Map;

public class Demo01Map {
    public static void main(String[] args) {
        //Map接口中的常用方法
        show01();
        show02();
        show03();
        show04();
    }

    /*
    public V put(K key,V value):把指定的键与指定的值添加到Map集合中
        返回值：v
            存储键值对的时候，key不重复，返回值v是null
            存储键值对的时候，key重复，会使用新的value替换map中重复的value，返回被替换的value值
    */
    private static void show01() {
        //创建Map集合对象，多态
        Map<String,String> map = new HashMap<>();
        String v1 = map.put("王嘉尔","11");
        System.out.println("v1:" + v1);  //v1:null
        String v2 = map.put("王嘉尔","22"); //v2:11
        System.out.println("v2:" + v2);
        System.out.println(map); //{王嘉尔=22}
    }

    /*
    public V remove (Object key):把指定的键，所对应的键值对元素，在Map集合中删除，返回被删除元素的值
        返回值：v
            key存在，v返回被删除的值
            key不存在，v返回null
    */
    private static void show02() {
        //c创建Map集合对象
        Map<String,Integer> map1 = new HashMap<>();
        map1.put("王嘉尔",20);
        map1.put("熊丰",18);
        System.out.println(map1); //{熊丰=18, 王嘉尔=20}
        Integer n = map1.remove("王嘉尔");
        System.out.println(n);  //20
        System.out.println(map1); //{熊丰=18}
        Integer n1 = map1.remove("易烊千玺");
        System.out.println(n1); //null
        System.out.println(map1); //{熊丰=18}
    }

    /*
    public V get(Object key):根据指定的键，获取Map集合中获取对应的值
    返回值：v
        key存在，返回对应的value值
        key不存在，返回null
    */
    private static void show03() {
        Map<String,Integer> map2 = new HashMap<>();
        map2.put("王嘉尔",20);
        map2.put("熊丰",18);
        Integer v1 = map2.get("王嘉尔");
        System.out.println(v1);//20
        Integer v2 = map2.get("ni");
        System.out.println(v2);//null

    }

    /*
    boolean containsKey(Object key):判断集合中是否包含指定的键。
    包含返回true，不包含返回false
    */
    private static void show04() {
        Map<String,Integer> map3 = new HashMap<>();
        map3.put("王嘉尔",20);
        map3.put("熊丰",18);
        boolean b1 = map3.containsKey("王嘉尔");
        System.out.println(b1); //true
        boolean b2 = map3.containsKey("ni");
        System.out.println(b2); //true
    }

}
     
